package cn.metona.utils;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public enum DateFormatEnum {

    // 常见日期格式
    DATE_FORMAT_YYYY_MM_DD("yyyy-MM-dd", DateTimeFormatter.ofPattern("yyyy-MM-dd")),
    DATE_FORMAT_DD_MM_YYYY("dd/MM/yyyy", DateTimeFormatter.ofPattern("dd/MM/yyyy")),
    DATE_FORMAT_MM_DD_YYYY("MM/dd/yyyy", DateTimeFormatter.ofPattern("MM/dd/yyyy")),
    DATE_FORMAT_YYYYMMDD("yyyyMMdd", DateTimeFormatter.ofPattern("yyyyMMdd")),

    // 常见日期时间格式
    DATETIME_FORMAT_YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd HH:mm:ss", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
    DATETIME_FORMAT_DD_MM_YYYY_HH_MM_SS("dd/MM/yyyy HH:mm:ss", DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")),
    DATETIME_FORMAT_MM_DD_YYYY_HH_MM_SS("MM/dd/yyyy HH:mm:ss", DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss")),
    DATETIME_FORMAT_YYYYMMDDHHMMSS("yyyyMMddHHmmss", DateTimeFormatter.ofPattern("yyyyMMddHHmmss")),

    // 其他格式
    DATE_FORMAT_YYYY_MM("yyyy-MM", DateTimeFormatter.ofPattern("yyyy-MM")),
    DATE_FORMAT_YYYY("yyyy", DateTimeFormatter.ofPattern("yyyy")),
    DATETIME_FORMAT_ISO("yyyy-MM-dd'T'HH:mm:ss", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"));

    private final String pattern; // 格式字符串
    private final DateTimeFormatter formatter; // DateTimeFormatter 对象

    /**
     * 构造函数
     *
     * @param pattern  格式字符串
     * @param formatter DateTimeFormatter 对象
     */
    DateFormatEnum(String pattern, DateTimeFormatter formatter) {
        this.pattern = pattern;
        this.formatter = formatter;
    }

    /**
     * 获取格式字符串
     *
     * @return 格式字符串
     */
    public String getPattern() {
        return pattern;
    }

    /**
     * 获取 DateTimeFormatter 对象
     *
     * @return DateTimeFormatter 对象
     */
    public DateTimeFormatter getFormatter() {
        return formatter;
    }

    /**
     * 根据格式字符串获取对应的枚举值
     *
     * @param pattern 格式字符串
     * @return 对应的枚举值，如果未找到则返回 null
     */
    public static DateFormatEnum fromPattern(String pattern) {
        for (DateFormatEnum format : DateFormatEnum.values()) {
            if (format.getPattern().equals(pattern)) {
                return format;
            }
        }
        return null;
    }

    public static void main(String[] args) {
        // 示例用法
        System.out.println("Default date format: " + DateFormatEnum.DATE_FORMAT_YYYY_MM_DD.getPattern());

        // 使用枚举值格式化日期
        LocalDate today = LocalDate.now();
        String formattedDate = today.format(DateFormatEnum.DATE_FORMAT_YYYY_MM_DD.getFormatter());
        System.out.println("Formatted date: " + formattedDate);

        // 使用枚举值解析日期
        String dateStr = "2023-10-05";
        LocalDate parsedDate = LocalDate.parse(dateStr, DateFormatEnum.DATE_FORMAT_YYYY_MM_DD.getFormatter());
        System.out.println("Parsed date: " + parsedDate);

        // 根据格式字符串获取枚举值
        DateFormatEnum formatEnum = DateFormatEnum.fromPattern("yyyy-MM-dd");
        if (formatEnum != null) {
            System.out.println("Found format: " + formatEnum.getPattern());
        }
    }
}
